"use strict";
{
    class HashTable {
        constructor() {
            /**
             * 这里数组使用的是定容数组，而且数组的大小是一个质数
             *  因为会需要数组的容量进行处理散列算法，所以 质数 很关键
             */
            this.table = new Array(137);
        }
        // 简单的散列函数（真实的这个函数肯定是非常复杂的，这里我的意思是大致模拟一下）
        simpHash(data) {
            // 霍纳算法
            const H = 37;
            var total = 0;
            for (var i = 0; i < data.length; ++i) {
                total += H * total + data.charCodeAt(i);
            }
            total = total % this.table.length;
            if (total < 0) {
                total += this.table.length - 1;
            }
            return parseInt(total);
        }
        // 插入元素
        put(data, value) {
            // 通过这里也可以知道 散列函数是非常重要的，一定要确保的是不发生碰撞
            let index = this.simpHash(data);
            this.table[index] = value;
        }
        // 显示散列表中的元素
        showDistro() {
            for (var i = 0; i < this.table.length; ++i) {
                if (this.table[i] != undefined) {
                    console.log(i + ": " + this.table[i]);
                }
            }
        }
        // 获取值
        get(key) {
            return this.table[this.simpHash(key)];
        }
    }
    let table1 = new HashTable();
    table1.put("Jimmy", 111);
    table1.put("xuexue", 222);
    table1.put("Jack", 333);
    table1.put("Henry", 444);
    table1.put(22, 444);
    table1.put("22", "what");
    table1.showDistro();
}
